package com.hsjk.szwj.module.train.dal.mysql.course;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.hsjk.szwj.framework.mybatis.core.mapper.BaseMapperX;
import com.hsjk.szwj.module.train.controller.admin.vo.AdminCourseDetailRespVO;
import com.hsjk.szwj.module.train.controller.admin.vo.AdminCoursePageReqVO;
import com.hsjk.szwj.module.train.controller.admin.vo.AdminCoursePageRespVO;
import com.hsjk.szwj.module.train.controller.admin.vo.AdminMemberCoursePageReqVO;
import com.hsjk.szwj.module.train.controller.admin.vo.AdminMemberCoursePageRespVO;
import com.hsjk.szwj.module.train.controller.admin.vo.AdminPlatformCoursePageReqVO;
import com.hsjk.szwj.module.train.controller.admin.vo.AdminPlatformCoursePageRespVO;
import com.hsjk.szwj.module.train.controller.app.vo.course.AppCoursePageRespVO;
import com.hsjk.szwj.module.train.dal.dataobject.course.CourseDO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.List;

@Mapper
public interface ICourseMapper extends BaseMapperX<CourseDO> {

    /**
     * 分页获取已购课程列表
     */
    IPage<AppCoursePageRespVO> selectPurchasedCoursePage(IPage<?> page
            , @Param("userId") Long userId, @Param("tenantIds") List<Long> tenantIds);

    /**
     * 课程是否已购买
     */
    @Select("SELECT COUNT(*) FROM train_member_course_mapping WHERE member_id = #{userId} AND course_id = #{courseId} AND deleted = 0")
    Integer selectIsPurchased(@Param("userId") Long userId, @Param("courseId") Long courseId);

    IPage<AdminCoursePageRespVO> selectAdminPage(Page<AdminCoursePageReqVO> page,
                                                 @Param("param") AdminCoursePageReqVO reqVO);

    AdminCourseDetailRespVO selectAdminDetail(@Param("courseId") Long courseId);

    IPage<AdminMemberCoursePageRespVO> memberCoursePage(Page<AdminMemberCoursePageReqVO> page,
                                                        @Param("param") AdminMemberCoursePageReqVO reqVO);

    Long getCourseItemQuestionSetActionCount(@Param("questionSetId") Long questionSetId
            , @Param("courseItemId") Long courseItemId,@Param("memberId") Long memberId);

    IPage<AdminPlatformCoursePageRespVO> getAdminPlatformCoursePage(Page<AdminPlatformCoursePageReqVO> page,
                                                                    @Param("param") AdminPlatformCoursePageReqVO reqVO,
                                                                    @Param("platformCourseTenantId") Long platformCourseTenantId);
}
